package uno.component;

import java.awt.Color;
import java.awt.Component;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Vector;

import javax.swing.JList;
import javax.swing.ListCellRenderer;
import uno.net.UnoPlayerID;



public class UnoGraphicPlayerList extends JList{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 8558394439523991700L;
	/**
	 * Vettore degli elementi che compongono la lista
	 * */
	Vector<UnoListItem> itemVector;
	
	/**
	 * 
	 * */
	public UnoGraphicPlayerList(LinkedList<UnoPlayerID> givenPL) {
		super();
		setCellRenderer(new CustomCellRenderer());
		buildVector(givenPL);
		setLeadership(0);
	}
	
	
	/**
	 * Crea il vettore iniziale
	 * */
	private void buildVector(LinkedList<UnoPlayerID> givenPL) {
		itemVector = new Vector<UnoListItem>();
		UnoListItem item;
		for(int i=0;i<givenPL.size();i++) {
			item = new UnoListItem(givenPL.get(i).getName(), 8, false);
			itemVector.addElement(item);
		}
	}
	
	/**
	 * */
	public void removePlayerFromList(int playerIndex) {
		itemVector.remove(playerIndex);
		setListData(itemVector);
	
	}
	
	/**
	 * Setta il numero di carte nella riga riguardante al peer nell'indice passato come parametro
	 * Se il numero di carte e' <0 allora verranno decrementate le carte. Se e' >=0 verranno
	 * sovrascritte
	 * */
	public void updatePlayerStatus(int playerIndex, int cards) {
			if(cards >= 0){	
				itemVector.get(playerIndex).setNumber(cards);	
			} else {	
				UnoListItem uli = itemVector.get(playerIndex);
				uli.setNumber(uli.getNumber() - cards);
			}
			setListData(itemVector);
	}
	
	/**
	 * 
	 * */
	public void setLeadership(int leaderIndex) {
			for(Iterator<UnoListItem> i = itemVector.iterator(); i.hasNext(); )
				i.next().setLeadership(false);
			itemVector.get(leaderIndex).setLeadership(true);
			setListData(itemVector);
	}

	
	//------------------------------------------------------------------
	/**
	 * Classe che implementa un CellRenderer personalizzato rimpiazzando
	 * quello di default (Non si sa bene il perche' ma e' essenziale)
	 * */
	private  class CustomCellRenderer implements ListCellRenderer {
		public Component getListCellRendererComponent
		(JList list, Object value, int index,
				boolean isSelected,boolean cellHasFocus) {
			Component component = (Component)value;
			component.setBackground
			(isSelected ? Color.white : getBackground());
			component.setForeground
			(isSelected ? Color.white : Color.black);
			return component;
		}
	}
	//-------------------------------------------------------------------
}
